package pe.com.empresa.servicios.impl;

import java.util.List;

import pe.com.empresa.datos.dao.DepartementoEmpresaMapper;
import pe.com.empresa.datos.dominio.DepartementoEmpresa;
import pe.com.empresa.datos.dominio.SolicitudRequisicion;
import pe.com.empresa.datos.dominio.SolicitudRequisicionDetalle;
import pe.com.empresa.servicios.servicio.GenerarSolicitudRequisionService;
import pe.com.empresa.utiles.Constantes;
import pe.com.empresa.utiles.EstadoOperacion;
import pe.com.empresa.utiles.SecuenciaUtil;
import pe.com.empresa.utiles.ServiceHelper;

public class GenerarSolicitudRequisionServiceImpl extends ServiceHelper
		implements GenerarSolicitudRequisionService {

	@Override
	public EstadoOperacion registrarSolicitudRequisicion(
			SolicitudRequisicion solicitud,
			List<SolicitudRequisicionDetalle> detalleSolicitud)
			throws Exception {

		EstadoOperacion estado = new EstadoOperacion();
		this.openSession();
		try{
			
			String secuencia = SecuenciaUtil.obtenerSecuencia(Constantes.TABLA_SOLICITUD_REQUISICION, session);
			solicitud.setNumeroSolicitudRequisicion(secuencia);
			this.insertar(solicitud);

			for (SolicitudRequisicionDetalle detalle : detalleSolicitud) {
				detalle.setNumeroSolicitudRequisicion(secuencia);
				this.insertar(detalle);
			}

			this.commit();


			estado.setCodigoGenerado(secuencia);
			estado.setMensajeEstado("[SUCCESS] Solicitud Generada con exito, numero "+ secuencia + ".");
			estado.setEstadoOperacion(Constantes.OP_SUCCESS);
			
		}catch(Exception e){
			
			this.rollback();
			estado.setMensajeEstado("[ERROR] Generando solicitud, intentelo mas tarde.");
			estado.setEstadoOperacion(Constantes.OP_EXCEPTION);
			
		}finally{
			this.closeSession();
		}

		return estado;
	}

	@Override
	public DepartementoEmpresa obtenerDepartamento(Integer id) throws Exception {
		// TODO Auto-generated method stub
		this.openSession();
		DepartementoEmpresa departamento = (DepartementoEmpresa) this
				.selectByPrimaryKey(DepartementoEmpresaMapper.class, id);
		this.closeSession();
		return departamento;
	}

}
